package com.blumov.fastbox.domain.model.compra;

import java.util.List;

/**
 * Repositorio de {@link Pedido}
 * 
 * @author Bruno Masci
 */
public interface PedidoRepository {

	/**
	 * Busca un pedido por su id.
	 *
	 * @param pedidoId Id
	 * @return Pedido, si lo encuentra; sino {@code null}
	 */
	Pedido find(PedidoId pedidoId);

	/**
	 * Guarda o actualiza un pedido.
	 * 
	 * @param pedido Pedido a guardar o actualizar
	 */
	void store(Pedido pedido);

	/**
	 * @return A unique, generated pedido Id.
	 */
	PedidoId nextPedidoId();

	/**
	 * @return El siguiente pedido asignable a un dispatcher.
	 */
	Pedido traerSiguientePedido();

	/**
	 * @return Todos los pedidos que estan en estado cocinando.
	 */
	List<Pedido> pedidosParaCocinar();

	/**
	 * @return Todos los pedidos que estan en estado pendiente de entrega (desde el punto de vista de
	 * la interfaz publica).
	 */
	List<Pedido> pedidosPendientes();
	
	/**
	 * @return Todos los pedidos que estan listo para entregarse.
	 */
	List<Pedido> pedidosListos();
}
